import type { ProductStateModel } from '../production/models';
import type { ReworkDocModel } from './models';

import { requestClient } from '#/api/request';

/** 返工单输入参数 */
export interface ReworkDocInput {
  id: number;
  /** 备注 */
  remark?: string;
  /** 零件码 */
  sn: string;
  /** 返工后需重新进入的工序 Id（为 0 表示产品直接下线） */
  targetOperationId: number;
}

/**
 * 分页获取返工单信息
 * @param params 分页查询参数
 * @returns 返回查询结果
 */
export async function getReworkDocPagedListApi(params?: PageParams) {
  return requestClient.get<PaginationResult<ReworkDocModel>>(
    '/mes/rework/doc/list-page',
    {
      params,
    },
  );
}

/**
 * 分页获取可返工的产品信息
 * @param params 分页查询参数
 * @returns 返回查询结果
 */
export async function getReworkablePagedListApi(params?: PageParams) {
  return requestClient.get<PaginationResult<ProductStateModel>>(
    '/mes/rework/doc/reworkable/list-page',
    {
      params,
    },
  );
}

/**
 * 分页获取在线返未完成的工单信息
 * @param params 分页查询参数
 * @returns 返回查询结果
 */
export async function getOnlineDoingReworkDocPagedListApi(params?: PageParams) {
  return requestClient.get<PaginationResult<ReworkDocModel>>(
    '/mes/rework/doc/online-doing/list-page',
    {
      params,
    },
  );
}

/**
 * 创建在线返工单
 * @param data 要创建的在线返工单
 * @returns 返回结果
 */
export async function createOnlineReworkDocApi(data: ReworkDocInput) {
  return requestClient.post<boolean>('/mes/rework/doc/online', data);
}

/**
 * 更新在线返工单
 * @param data 要更新的在线返工单
 * @returns 返回结果
 */
export async function updateOnlineReworkDocApi(data: ReworkDocInput) {
  return requestClient.put<boolean>('/mes/rework/doc/online', data);
}

/**
 * 取消返工单
 * @param id 返工单 Id
 * @returns 返回结果
 */
export async function cancelReworkDocApi(id: number) {
  return requestClient.put<boolean>(`/mes/rework/doc/cancel/${id}`);
}
